<!--
  Copyright JS Foundation and other contributors, http://js.foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<script type="text/html" data-help-name="delay">
    <p>Delays each message passing through the node or limits the rate at which they can pass.</p>
    <h3>Inputs</h3>
    <dl class="message-properties">
        <dt class="optional">delay <span class="property-type">number</span></dt>
        <dd>Sets the delay, in milliseconds, to be applied to the message. This
            option only applies if the node is configured to allow the message to
            override the configured default delay interval.</dd>
        <dt class="optional">rate <span class="property-type">number</span></dt>
        <dd>Sets the rate value in milliseconds between messages.
            This node overwrites the existing rate value defined in the node configuration
            when it receives the message which contains <code>msg.rate</code> value in milliSeconds.
            This option only applies if the node is configured to allow the message to
            override the configured default rate interval.</dd>
        <dt class="optional">reset</dt>
        <dd>If the received message has this property set to any value, all
            outstanding messages held by the node are cleared without being sent.</dd>
        <dt class="optional">flush</dt>
        <dd>If the received message has this property set to a numeric value then that many messages
            will be released immediately. If set to any other type (e.g. boolean), then all
            outstanding messages held by the node are sent immediately.</dd>
        <dt class="optional">toFront</dt>
        <dd>When in rate limit mode, if the received message has this property set to boolean <code>true</code>,
            then the message is pushed to the front of the queue and will be released next.
            This can be used in combination with <code>msg.flush=1</code> to resend immediately.
        </dd>
    </dl>
    <h3>Details</h3>
    <p>When configured to delay messages, the delay interval can be a fixed value,
        a random value within a range or dynamically set for each message.
        Each message is delayed independently of any other message, based on
        the time of its arrival.
    </p>
    <p>When configured to rate limit messages, their delivery is spread across
        the configured time period. The status shows the number of messages currently in the queue.
        It can optionally discard intermediate messages as they arrive.</p>
    </p>
    <p>If set to allow override of the rate, the new rate will be applied immediately,
        and will remain in effect until changed again, the node is reset, or the flow is restarted.</p>
    <p>The rate limiting can be applied to all messages, or group them according to
        their <code>msg.topic</code> value. When grouping, intermediate messages are
        automatically dropped. At each time interval, the node can either release
        the most recent message for all topics, or release the most recent message
        for the next topic.
    </p>
    <p><b>Note</b>: In rate limit mode the maximum queue depth can be set by a property in your
        <i>settings.js</i> file. For example <code>nodeMessageBufferMaxLength: 1000,</code></p>
</script>
